Custom Interceptors তৈরি এবং লগিং, অডিটিং এর জন্য ব্যবহার

Web Development - অ্যাপাচি সিএক্সএফ (Apache CXF) - Endpoints এবং Interceptors (এন্ডপয়েন্ট এবং ইন্টারসেপ্টরস) |

Apache CXF এ Interceptors ব্যবহৃত হয় SOAP ও RESTful ওয়েব সার্ভিসের চলাচল প্রক্রিয়া কাস্টমাইজ এবং প্রসেস করার জন্য। Interceptors সাধারণত সার্ভিসের ইনপুট এবং আউটপুট স্ট্রিমকে প্রসেস করতে, লগিং, নিরাপত্তা, ট্রান্সফরমেশন, অডিটিং ইত্যাদি উদ্দেশ্যে ব্যবহৃত হয়।

CXF তে Custom Interceptors তৈরি করে আপনি সার্ভিসের বিভিন্ন স্তরের কার্যক্রমকে নিয়ন্ত্রণ করতে পারবেন, যেমন SOAP মেসেজ প্রক্রিয়াকরণ, লগিং, কিংবা অডিটিং, যা সার্ভিসের আচরণ বা ফ্লো ট্র্যাক করতে সাহায্য করে।


ধাপ 1: Apache CXF এর Interceptor কী?

Interceptor হল একটি কাস্টম ক্লাস যা CXF এর মেসেজের লাইফসাইকেল কন্ট্রোল করে, এবং এটি দুই ধরনের হতে পারে:

  • InInterceptor: এটি ইনপুট মেসেজে ইন্টারসেপ্ট করে।
  • OutInterceptor: এটি আউটপুট মেসেজে ইন্টারসেপ্ট করে।

এছাড়া, Phase এর মাধ্যমে আপনি কনফিগার করতে পারেন কখন এই Interceptors কার্যকর হবে। সাধারণত PRE_PROTOCOL, POST_PROTOCOL, SEND, RECEIVE ইত্যাদি ফেজ ব্যবহার করা হয়।


ধাপ 2: Custom Interceptor তৈরি করা

আপনার প্রয়োজন অনুযায়ী InInterceptor বা OutInterceptor তৈরি করতে পারেন। এখানে একটি কাস্টম OutInterceptor তৈরি করার উদাহরণ দেওয়া হলো যা লগিংয়ের জন্য ব্যবহৃত হবে।

2.1 Custom OutInterceptor তৈরি করা

import org.apache.cxf.interceptor.OutInterceptor;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.message.MessageContentsList;
import java.util.logging.Logger;

public class LoggingInterceptor extends OutInterceptor {

    private static final Logger LOGGER = Logger.getLogger(LoggingInterceptor.class.getName());

    public LoggingInterceptor() {
        // Set phase to send after protocol phase
        super(Phase.POST_PROTOCOL);
    }

    @Override
    public void handleMessage(Message message) {
        if (message != null) {
            // Get the outgoing message content (response)
            MessageContentsList contents = (MessageContentsList) message.getContent(MessageContentsList.class);
            String xml = XMLUtils.toString(contents.get(0)); // Convert the response to a string
            LOGGER.info("Outgoing message: " + xml); // Log the response message
        }
    }
}

এখানে:

  • Phase.POST_PROTOCOL: এই ফেজটি ব্যবহার করা হয়েছে যাতে মেসেজ প্রোটোকল সম্পন্ন হওয়ার পর লগ করা হয়।
  • LoggingInterceptor: এটি আউটগোয়িং মেসেজের XML কন্টেন্ট লগ করবে।

2.2 Custom InInterceptor তৈরি করা

এছাড়া, আপনি যদি ইনপুট মেসেজ (request) ইন্টারসেপ্ট করতে চান, তাহলে InInterceptor তৈরি করতে পারেন:

import org.apache.cxf.interceptor.InInterceptor;
import org.apache.cxf.message.Message;
import java.util.logging.Logger;

public class RequestLoggingInterceptor extends InInterceptor {

    private static final Logger LOGGER = Logger.getLogger(RequestLoggingInterceptor.class.getName());

    public RequestLoggingInterceptor() {
        // Set phase to receive
        super(Phase.RECEIVE);
    }

    @Override
    public void handleMessage(Message message) {
        if (message != null) {
            String request = message.toString(); // Get the incoming message as string
            LOGGER.info("Incoming message: " + request); // Log the incoming message
        }
    }
}

এখানে:

  • Phase.RECEIVE: এই ফেজটি ব্যবহার করা হয়েছে যাতে মেসেজ রিসিভ হওয়ার পর ইন্টারসেপ্ট করা হয়।

ধাপ 3: Custom Interceptors এর ব্যবহার

এখন, আপনাকে Spring বা Java Config ব্যবহার করে এই Custom Interceptors গুলোকে CXF সার্ভিসে কনফিগার করতে হবে।

3.1 Spring XML কনফিগারেশনে Custom Interceptors সংযুক্ত করা

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Add custom Interceptors -->
    <bean id="loggingInterceptor" class="com.example.interceptor.LoggingInterceptor" />
    <bean id="requestLoggingInterceptor" class="com.example.interceptor.RequestLoggingInterceptor" />

    <!-- CXF Bean Configuration -->
    <bean id="cxf" class="org.apache.cxf.bus.spring.SpringBus" />

    <!-- Add the Interceptors to the CXF Bus -->
    <bean id="server" class="org.apache.cxf.jaxws.EndpointImpl">
        <property name="service" ref="helloWorldService"/>
        <property name="address" value="/helloWorld"/>
        <property name="inInterceptors">
            <list>
                <ref bean="requestLoggingInterceptor"/>
            </list>
        </property>
        <property name="outInterceptors">
            <list>
                <ref bean="loggingInterceptor"/>
            </list>
        </property>
    </bean>
</beans>

এখানে:

  • inInterceptors: ইনপুট মেসেজে ইন্টারসেপ্টর যোগ করতে ব্যবহৃত হয়।
  • outInterceptors: আউটপুট মেসেজে ইন্টারসেপ্টর যোগ করতে ব্যবহৃত হয়।

3.2 Java Config ব্যবহার করে Custom Interceptors যোগ করা

import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.bus.spring.SpringBus;

@Configuration
public class CxfConfig {

    @Bean
    public LoggingInterceptor loggingInterceptor() {
        return new LoggingInterceptor();
    }

    @Bean
    public RequestLoggingInterceptor requestLoggingInterceptor() {
        return new RequestLoggingInterceptor();
    }

    @Bean
    public Server cxfServer(SpringBus cxf, HelloWorldService helloWorldService) {
        EndpointImpl endpoint = new EndpointImpl(cxf, helloWorldService);
        endpoint.getInInterceptors().add(requestLoggingInterceptor());
        endpoint.getOutInterceptors().add(loggingInterceptor());
        endpoint.publish("/helloWorld");
        return endpoint;
    }
}

এখানে:

  • EndpointImpl: এটি CXF সার্ভিসের ইন্ডপয়েন্ট তৈরি করে।
  • getInInterceptors() এবং getOutInterceptors(): ইনপুট এবং আউটপুট ইন্টারসেপ্টরগুলো অ্যাড করতে ব্যবহৃত হয়।

ধাপ 4: লগিং এবং অডিটিং

কাস্টম ইন্টারসেপ্টর ব্যবহারের মাধ্যমে আপনি লগিং বা অডিটিং প্রক্রিয়াকে আরও উন্নত করতে পারেন। যেমন:

  1. Log Request and Response: ওয়েব সার্ভিসের ইনপুট এবং আউটপুট মেসেজকে লগ করা।
  2. Track API Usage: ওয়েব সার্ভিসের ব্যবহারের সময় ট্র্যাকিং বা অডিটিং করা।
  3. Security Auditing: নিরাপত্তা সম্পর্কিত মেসেজগুলো অডিট করা (যেমন: ইউজার অথেনটিকেশন, অথরাইজেশন)।

এই ধরনের কাস্টম ইন্টারসেপ্টরগুলো আপনার অ্যাপ্লিকেশনের API Monitoring, Debugging, এবং Compliance কার্যক্রমকে আরও সহজ ও কার্যকর করতে সাহায্য করে।


এভাবে, আপনি Apache CXF এ Custom Interceptors তৈরি এবং লগিং বা অডিটিংয়ের জন্য ব্যবহার করতে পারেন, যা ওয়েব সার্ভিসের কার্যকারিতা বাড়াতে সহায়ক হবে।

Content added By
Promotion